"""
Case Type   : 功能测试
Case Name   : 安装池化集群，共享文件校验
Create At   : 2025/03/25
Owner       : @chen
Description :
    1.安装一主两备池化集群校验共享文件:pg_xlog
dsscmd ls -p +log;dsscmd ls -p +data;
    2.校验共享文件:pg_doublewrite
dsscmd ls -p +data
    3.校验共享文件:pg_control
dsscmd ls -p +data
Expect      :
    1.只存在一个共享文件
    2.只存在一个共享文件
    3.只存在一个共享文件
History     :
"""

import unittest
import os
from testcase.utils.Logger import Logger
from yat.test import Node
from yat.test import macro
logger = Logger()

class Test_Xlog_Syncretism_0001(unittest.TestCase):
    def setUp(self):
        logger.info(f'--------{os.path.basename(__file__)} start--------')
        self.pri_node = Node('PrimaryDbUser')
        self.sta1_node = Node('Standby1DbUser')
        self.sta2_node = Node('Standby2DbUser')
    
    def test_shared_storage(self):
        text = '-----step1:校验共享文件:pg_xlog expect:只存在一个共享文件-----'
        logger.info(text)
        cmd_data = f'source {macro.DB_ENV_PATH};dsscmd ls -p +data'
        cmd_log = f'source {macro.DB_ENV_PATH};dsscmd ls -p +log'
        logger.info('-----主节点校验-----')
        logger.info(cmd_data)
        res = self.pri_node.sh(cmd_data).result()
        logger.info(res)
        self.assertTrue(1 == res.count('pg_xlog'), '主节点校验失败')
        logger.info(cmd_log)
        res = self.pri_node.sh(cmd_log).result()
        logger.info(res)
        self.assertTrue(1 == res.count('pg_xlog'), '主节点校验失败')
        logger.info('-----备1节点校验-----')
        logger.info(cmd_data)
        res = self.sta1_node.sh(cmd_data).result()
        logger.info(res)
        self.assertTrue(1 == res.count('pg_xlog'), '备1节点校验失败')
        logger.info(cmd_log)
        res = self.sta1_node.sh(cmd_log).result()
        logger.info(res)
        self.assertTrue(1 == res.count('pg_xlog'), '备1节点校验失败')
        logger.info('-----备2节点校验-----')
        logger.info(cmd_data)
        res = self.sta2_node.sh(cmd_data).result()
        logger.info(res)
        self.assertTrue(1 == res.count('pg_xlog'), '备2节点校验失败')
        logger.info(cmd_log)
        res = self.sta2_node.sh(cmd_log).result()
        logger.info(res)
        self.assertTrue(1 == res.count('pg_xlog'), '备2节点校验失败')

        text = '-----step2:校验共享文件:pg_doublewrite expect:只存在一个共享文件-----'
        logger.info(text)
        logger.info('-----主节点校验-----')
        logger.info(cmd_data)
        res = self.pri_node.sh(cmd_data).result()
        logger.info(res)
        self.assertTrue(1 == res.count('pg_doublewrite'), '主节点校验失败')
        logger.info('-----备1节点校验-----')
        logger.info(cmd_data)
        res = self.sta1_node.sh(cmd_data).result()
        logger.info(res)
        self.assertTrue(1 == res.count('pg_doublewrite'), '备1节点校验失败')
        logger.info('-----备2节点校验-----')
        logger.info(cmd_data)
        res = self.sta2_node.sh(cmd_data).result()
        logger.info(res)
        self.assertTrue(1 == res.count('pg_doublewrite'), '备2节点校验失败')

        text = '-----step3:校验共享文件:pg_control expect:只存在一个共享文件-----'
        logger.info(text)
        logger.info('-----主节点校验-----')
        logger.info(cmd_data)
        res = self.pri_node.sh(cmd_data).result()
        logger.info(res)
        self.assertTrue(1 == res.count('pg_control '), '主节点校验失败')
        logger.info('-----备1节点校验-----')
        logger.info(cmd_data)
        res = self.sta1_node.sh(cmd_data).result()
        logger.info(res)
        self.assertTrue(1 == res.count('pg_control '), '备1节点校验失败')
        logger.info('-----备2节点校验-----')
        logger.info(cmd_data)
        res = self.sta2_node.sh(cmd_data).result()
        logger.info(res)
        self.assertTrue(1 == res.count('pg_control '), '备2节点校验失败')
    
    def tearDown(self):
        logger.info(f'-----{os.path.basename(__file__)} end-----')